--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit e80ee2113b06e6b8a75f2f76d13d4de21c063f95
Parents : 3bc9611
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-08T08:59:09-05:00
feat(tools): add alpha badge support for tools and update localization files
Changes
12 files changed, 25 insertions(+), 0 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/components/tools/ToolsPage.vue b/meshchatx/src/frontend/components/tools/ToolsPage.vue
index dd94dd92..cf6677d8 100644
--- a/meshchatx/src/frontend/components/tools/ToolsPage.vue
+++ b/meshchatx/src/frontend/components/tools/ToolsPage.vue
@@ -73,6 +73,12 @@
<div class="flex-1 min-w-0">
<div class="flex items-center gap-2 flex-wrap">
<div class="tool-card__title">{{ tool.title }}</div>
+ <span
+ v-if="tool.alpha"
+ class="px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300 rounded-sm border border-violet-200 dark:border-violet-800"
+ >
+ {{ $t("tools.alpha_badge") }}
+ </span>
<span
v-if="tool.beta"
class="px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded-sm border border-amber-200 dark:border-amber-800"
diff --git a/meshchatx/src/frontend/js/registries/coreToolsEntries.js b/meshchatx/src/frontend/js/registries/coreToolsEntries.js
index 13e5bf47..e876207b 100644
--- a/meshchatx/src/frontend/js/registries/coreToolsEntries.js
+++ b/meshchatx/src/frontend/js/registries/coreToolsEntries.js
@@ -10,6 +10,7 @@
* @property {string} descriptionKey
* @property {string} [title]
* @property {string} [description]
+ * @property {boolean} [alpha]
* @property {boolean} [beta]
* @property {boolean} [comingSoon]
* @property {string} [customClass]
@@ -53,6 +54,7 @@ export const CORE_TOOLS_ENTRIES = [
iconBg: "tool-card__icon bg-indigo-50 text-indigo-600 dark:bg-indigo-900/30 dark:text-indigo-200",
titleKey: "tools.rnsh.title",
descriptionKey: "tools.rnsh.description",
+ alpha: true,
},
{
name: "rnstatus",
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 3c8a9cee..d696f849 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -1760,6 +1760,7 @@
"diagnostics_description": "Mesh- und Reticulum-Werkzeuge an einem Ort: Erreichbarkeit, Pfade, Dateitransfer, Übersetzung, Dokumentation und Hardware-Hilfen. Öffnen Sie eine Zeile für die vollständige Ansicht.",
"back_to_tools": "Zurück zu Werkzeugen",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Laufzeit bis zu einem Ziel, das Ping akzeptiert."
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index 24b729f6..33f648ef 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "Mesh and Reticulum utilities in one place: reachability, paths, file transfer, translation, documentation, and hardware helpers. Open any row for the full tool.",
"back_to_tools": "Back to tools",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Measure round-trip time to another node or app that answers ping."
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 8e2bb44a..b672cbce 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "Utilidades de malla y Reticulum en un mismo sitio: alcance, rutas, transferencia de archivos, traducción, documentación y ayudas de hardware. Abra una fila para la herramienta completa.",
"back_to_tools": "Volver a herramientas",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Medir el tiempo de ida y vuelta a un destino que acepta ping."
diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index dfd214f9..4424d62a 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "Mesh and Reticulum utilities in one place: reachability, paths, file transfer, translation, documentation, and hardware helpers. Open any row for the full tool.",
"back_to_tools": "Back to tools",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Measure round-trip time to another node or app that answers ping."
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index d9b0da43..da1b6a5e 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "Utilitaires mesh et Reticulum au même endroit : joignabilité, chemins, transfert de fichiers, traduction, documentation et aides matérielles. Ouvrez une ligne pour l'outil complet.",
"back_to_tools": "Retour aux outils",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Mesurer le temps aller-retour vers une destination qui accepte ping."
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 451919d0..29b55c70 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -1924,6 +1924,7 @@
"diagnostics_description": "Strumenti mesh e Reticulum in un unico posto: raggiungibilità, percorsi, trasferimento file, traduzione, documentazione e assistenza hardware. Apri una riga per lo strumento completo.",
"back_to_tools": "Torna agli strumenti",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Misura il tempo di andata e ritorno verso una destinazione che accetta il ping."
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index dd79dc01..a8a3c0ca 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "Mesh- en Reticulumhulpprogramma's op één plek: bereikbaarheid, paden, bestandsoverdracht, vertaling, documentatie en hardwarehulpen. Open een rij voor de volledige tool.",
"back_to_tools": "Terug naar gereedschap",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Meet de rondreistijd naar een bestemming die ping accepteert."
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 25d3d261..c7d7a3cb 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -1760,6 +1760,7 @@
"diagnostics_description": "Сетевые и Reticulum-утилиты в одном месте: доступность, маршруты, передача файлов, перевод, документация и помощь с оборудованием. Откройте строку для полного инструмента.",
"back_to_tools": "Назад к инструментам",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "Ping",
"description": "Измерение RTT до узла, который принимает ping."
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index c28a524e..a232237c 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -1872,6 +1872,7 @@
"diagnostics_description": "网格与 Reticulum 常用工具集中在一处:可达性、路径、文件传输、翻译、文档与硬件辅助。点击任一行打开完整工具。",
"back_to_tools": "返回工具",
"beta_badge": "Beta",
+ "alpha_badge": "Alpha",
"ping": {
"title": "ing",
"description": "测量到一个接受ping的目的地的往返时间。"
diff --git a/tests/frontend/ToolsPage.test.js b/tests/frontend/ToolsPage.test.js
index 99d6d1cd..ba142f40 100644
--- a/tests/frontend/ToolsPage.test.js
+++ b/tests/frontend/ToolsPage.test.js
@@ -74,6 +74,14 @@ describe("ToolsPage.vue", () => {
expect(wrapper.text()).toContain("common.no_results");
});
+ it("shows an alpha badge on the rnsh tool", () => {
+ const wrapper = mountToolsPage();
+ const rnsh = wrapper.vm.tools.find((tool) => tool.name === "rnsh");
+ expect(rnsh?.alpha).toBe(true);
+ const rnshRow = wrapper.findAll(".tool-row").find((row) => row.text().includes("tools.rnsh.title"));
+ expect(rnshRow?.text()).toContain("tools.alpha_badge");
+ });
+
it("clears search query when close button is clicked", async () => {
const wrapper = mountToolsPage();
const searchInput = wrapper.find("input");
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────